#include<iostream>
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn = 1005;
int main()
{
    int N,M;
    cin>>N>>M;
    vector<int> G[maxn];
    for(int i = 0; i < M; i++) {
        int start,end;
        cin>>start>>end;
        G[end].push_back(start);
    }
    int k;
    cin>>k;
    bool visited[maxn];
    bool isFirstOut = true;
    for(int i = 0; i < k; i++) {
        fill(visited,visited+N+1,false);
        int tempOrder[maxn];
        bool isTopol = true;
        for(int j = 0; j < N; j++) {
            scanf("%d",&tempOrder[j]);
        }
        for(int j = 0; j < N; j++) {
            visited[tempOrder[j]] = true;
            if(G[tempOrder[j]].size()!=0) {
                for(unsigned int k = 0; k < G[tempOrder[j]].size(); k++) {
                    if(visited[G[tempOrder[j]][k]]==false) {
                        isTopol = false;
                        break;
                    }
                }
            }
            if(isTopol==false) break;
        }
        if(isTopol==false) {
            if(isFirstOut) {
                printf("%d",i);
                isFirstOut = false;
            }
            else
                printf(" %d",i);
        }
    }
    return  0;
}